import store from '@/store'
import { nextTick } from 'vue'
import { isString, isArray } from '@/utils/validate'
import settings from '@/settings'

// you can set in settings.js
// errorLog:'production' | ['production', 'development']
const { errorLog: needErrorLog } = settings

function checkNeed() {
  const env = process.env.NODE_ENV
  if (isString(needErrorLog)) {
    return env === needErrorLog
  }
  if (isArray(needErrorLog)) {
    return needErrorLog.includes(env)
  }
  return false
}

// if (checkNeed()) {
//   Vue.config.errorHandler = function (err, vm, info, a) {
//     // Don't ask me why I use Vue.nextTick, it just a hack.
//     // detail see https://forum.vuejs.org/t/dispatch-in-vue-config-errorhandler-has-some-problem/23500
//     Vue.nextTick(() => {
//       store.dispatch('errorLog/addErrorLog', {
//         err,
//         vm,
//         info,
//         url: window.location.href
//       })
//       console.error(err, info)
//     })
//   }
// }

export default (app) => {
  if (checkNeed()) {
    app.config.errorHandler = (err, vm, info) => {
      nextTick(() => {
        store.dispatch('errorLog/addErrorLog', {
          err,
          vm,
          info,
          url: window.location.href
        })
        console.error(err, vm, info)
      })
    }
  }
}
